package com.felkertech.cumulustv.activities; import android.content.Intent; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; import android.graphics.Bitmap; import android.graphics.drawable.Icon; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.SurfaceView; import android.view.WindowManager; import android.widget.MediaController; import android.widget.Toast; import android.widget.VideoView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.Target; import com.felkertech.cumulustv.model.ChannelDatabase; import com.felkertech.cumulustv.model.JsonChannel; import com.felkertech.cumulustv.player.CumulusTvPlayer; import com.felkertech.cumulustv.player.CumulusWebPlayer; import com.felkertech.cumulustv.player.MediaSourceFactory; import com.felkertech.n.cumulustv.R; import java.util.Arrays; import java.util.concurrent.ExecutionException; /** * Built-in video playback activity. Just pass URL in an intent. */ public class CumulusVideoPlayback extends AppCompatActivity { private static final String TAG = CumulusVideoPlayback.class.getSimpleName(); private String urlStream; private VideoView myVideoView; public static final String KEY_VIDEO_URL = "VIDEO_URL"; private com.felkertech.cumulustv.player.CumulusTvPlayer mTvPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* Doing it the native way */ Intent parameters = getIntent(); if(parameters == null) { setContentView(R.layout.fullvideo);//*************** myVideoView = (VideoView) this.findViewById(R.id.myVideoView); MediaController mc = new MediaController(this); myVideoView.setMediaController(mc); String ABCNews = "http://abclive.abcnews.com/i/abc_live4@136330/index_1200_av-b.m3u8"; String Brazil = "http://stream331.overseebrasil.com.br/live_previd_155/_definst_/live_previd_155/playlist.m3u8"; String NASA = "http://www.nasa.gov/multimedia/nasatv/NTV-Public-IPS.m3u8"; urlStream = ABCNews; Log.d(TAG, "About to open " + urlStream.toString()); runOnUiThread(new Runnable() { @Override public void run() { Log.d(TAG, "On UI Thread"); myVideoView.setVideoURI(Uri.parse(urlStream)); Log.d(TAG, "Now play"); myVideoView.start(); } }); } else { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getSupportActionBar().hide(); updateLauncherShortcut(); urlStream = parameters.getStringExtra(KEY_VIDEO_URL); if(!urlStream.isEmpty()) { mTvPlayer = new CumulusTvPlayer(this); setContentView(R.layout.full_surfaceview); SurfaceView sv = (SurfaceView) findViewById(R.id.surface); mTvPlayer.setSurface(sv.getHolder().getSurface()); mTvPlayer.setVolume(1); mTvPlayer.registerErrorListener(new CumulusTvPlayer.ErrorListener() { @Override public void onError(Exception error) { Log.e(TAG, error.toString()); if(error instanceof MediaSourceFactory.NotMediaException) { Log.d(TAG, "Cannot play the stream, try loading it as a website"); Toast.makeText(CumulusVideoPlayback.this, R.string.msg_open_web, Toast.LENGTH_SHORT).show(); CumulusWebPlayer wv = new CumulusWebPlayer(CumulusVideoPlayback.this, new CumulusWebPlayer.WebViewListener() { @Override public void onPageFinished() { //Don't do anything } }); wv.load(urlStream); setContentView(wv); } } }); Log.d(TAG, "Start playing " + urlStream); mTvPlayer.startPlaying(Uri.parse(urlStream)); mTvPlayer.play(); } else { Toast.makeText(this, R.string.msg_no_url_found, Toast.LENGTH_SHORT).show(); finish(); } } } @Override protected void onStop() { super.onStop(); mTvPlayer.stop(); mTvPlayer.release(); } private void updateLauncherShortcut() { // We will have one dynamic shortcut - to whichever stream was played last new Thread(new Runnable() { @Override public void run() { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { JsonChannel jsonChannel = ChannelDatabase.getInstance(getApplicationContext()) .findChannelByMediaUrl(urlStream); if (jsonChannel == null) { // Don't create a shortcut because we don't have metadata return; } Log.d(TAG, "Adding dynamic shortcut to " + jsonChannel.getName()); String logo = ChannelDatabase.getNonNullChannelLogo(jsonChannel); try { Bitmap logoBitmap = Glide.with(getApplicationContext()) .load(logo) .asBitmap() .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .get(); ShortcutManager shortcutManager = getSystemService(ShortcutManager.class); shortcutManager.removeAllDynamicShortcuts(); Intent playVideo = new Intent(getApplicationContext(), CumulusVideoPlayback.class); playVideo.setAction("play"); playVideo.putExtra(KEY_VIDEO_URL, urlStream); ShortcutInfo shortcut = new ShortcutInfo.Builder(CumulusVideoPlayback.this, "id1") .setShortLabel(jsonChannel.getName()+"") .setLongLabel(jsonChannel.getNumber() + " - " + jsonChannel.getName()) .setIcon(Icon.createWithBitmap(logoBitmap)) .setIntent(playVideo) .build(); shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut)); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } } } }).start(); } }